使用 wireguard 搭建混合云组网
WireGuard 是一种简单、快速且安全的 VPN 解决方案,可以用来搭建混合云组网。下面是一般步骤来设置 WireGuard 用于混合云组网。
安装 WireGuard
在所有需要通信的服务器上安装 WireGuard。安装方法取决于你的操作系统,例如在 Ubuntu 上,你可以运行:
sudo apt update
sudo apt install wireguard
内核问题
需要安装版本高于 5.6 的内核
# 添加 PPA:
sudo add-apt-repository ppa:canonical-kernel-team/unstable
sudo apt update
# 安装新内核
sudo apt install linux-generic-lts-<版本号>
如果你不能升级内核,你可以尝试安装 WireGuard 的 DKMS(动态内核模块支持)版本,这将为你的当前内核版本编译和安装 WireGuard 模块。
1、安装必要的软件包:
sudo apt install software-properties-common
1、添加 WireGuard PPA:
sudo add-apt-repository ppa:wireguard/wireguard
2、更新软件包列表并安装 WireGuard:
sudo apt update
sudo apt install wireguard-dkms wireguard-tools
这将为你的现有内核版本编译并安装 WireGuard 模块。
配置 WireGuard
1、生成密钥对:在每台服务器上,运行以下命令来生成公钥和私钥。
wg genkey | tee privatekey | wg pubkey > publickey
2、配置服务器:选择一个服务器作为 WireGuard 的服务器。创建一个配置文件 /etc/wireguard/wg0.conf
并填入以下内容:
[Interface]
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = <服务器私钥>
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
[Peer]
PublicKey = <客户端1公钥>
AllowedIPs = 10.0.0.2/32
[Peer]
PublicKey = <客户端2公钥>
AllowedIPs = 10.0.0.3/32
替换 <服务器私钥>
、<客户端1公钥>
和 <客户端2公钥>
为相应的值。
3、配置客户端:在每台客户端服务器上,创建一个配置文件 /etc/wireguard/wg0.conf
并填入以下内容:
[Interface]
Address = 10.0.0.2/32
PrivateKey = <客户端私钥>
DNS = 10.0.0.1
[Peer]
PublicKey = <服务器公钥>
Endpoint = <服务器IP地址>:51820
AllowedIPs = 0.0.0.0/0
替换 <客户端私钥>
、<服务器公钥>
和 <服务器IP地址>
为相应的值。
启动 WireGuard
在服务器和客户端上,运行以下命令来启动 WireGuard:
sudo wg-quick up wg0
要让 WireGuard 在系统启动时自动运行,可以使用:
sudo systemctl enable wg-quick@wg0
测试连接
在客户端上,尝试ping服务器的 WireGuard 地址:
ping 10.0.0.1
如果一切配置正确,你应该能够看到 ping 响应。
以上步骤仅为基本的 WireGuard 混合云组网配置。根据你的具体需求,可能还需要进一步的配置和调整,例如设置路由规则、防火墙规则等。
错误处理
报错“Device "wg0" does not exist.”意味着系统中不存在名为“wg0”的网络接口。这通常发生在尝试关闭或配置不存在的 WireGuard 接口时。
要解决这个问题,你可以按照以下步骤操作:
1、确保 WireGuard 已正确安装
首先,确保你已经在系统上正确安装了 WireGuard。
2、创建 WireGuard 接口
你可以通过运行以下命令来创建一个新的 WireGuard 接口:
sudo ip link add dev wg0 type wireguard
3、配置 WireGuard 接口
在创建了 WireGuard 接口之后,你需要为其分配私钥并进行其他必要的配置:
sudo wg set wg0 private-key /path/to/privatekey
sudo ip address add 192.168.1.1/24 dev wg0
sudo ip link set wg0 up
请确保你将 /path/to/privatekey
替换为私钥文件的实际路径,并根据需要调整 IP 地址。
4、测试接口
现在,你应该能够看到新创建的 wg0
接口:
ip addr show dev wg0
5、配置 WireGuard 连接
最后,你需要编辑 WireGuard 配置文件(通常位于 /etc/wireguard/wg0.conf
),并添加必要的 Peer 信息。然后,你可以使用 wg-quick
来管理 WireGuard 接口:
sudo wg-quick up wg0
这应该会启动 wg0
接口并应用你在配置文件中指定的设置。
6、检查状态
要查看 WireGuard 接口的状态,你可以使用:
sudo wg show
这应该会显示关于 wg0
接口的信息,包括其公钥、私钥(显示为 (hidden)
)、连接的 peers 以及相关的网络设置。
检查当前的 wg
遇到个很奇怪的问题,每次启动都报错下面这个
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 192.168.1.1 dev wg0
[#] ip link set mtu 1420 up dev wg0
RTNETLINK answers: Address already in use
[#] ip link delete dev wg0
所以很奇怪,所以 sudo wg show
发现 K3s 的 flannel 已经配置了一个网络了,所以要避开这个网段,以及这个端口 51820
interface: flannel-wg
public key: xxxxxxxxxxxxxxxxxxxx
private key: (hidden)
listening port: 51820
peer: iTR00/xxxxxxxxxx
endpoint: xxxxxxxxxx
allowed ips: xxxxxxxxxx/24
latest handshake: 1 minute, 37 seconds ago
transfer: 301.61 KiB received, 161.82 KiB sent
persistent keepalive: every 25 seconds
删掉某个 wg 配置
sudo wg-quick down wg0